package com.zsrt.java.day20161227.zsh.demo06;

public class ArrayQAUD {
	
	/**
	 * 以下四个常用方法在使用过程中，注意
	 * 		1）、数组的类型、数的类型
	 * 		2）、String数组中是否存在默认值null
	 * 		3）、数组中多个相同值的时候怎么完美实现？解决方法？？
	 * 
	 * 
	 */
	
	/**
	 * 一、	QueryArray	数组查找（得出数组某元素所在下标值）
	 * 已知：	1、一个数组
	 * 		2、一个要查询的数
	 * 要求：	查询数组元素所在的下标值
	 * 分析：	使用循环去获取已知数组的各个具体值，获取一个值 和要查询的数比较
	 * 		A、先过滤掉值为null的元素
	 * 		B、相同	返回元素在数组的下标值，结束循环
	 * 		C、不同	接着往下找
	 * 一般的，如果找不到这个数，返回-1，
	 */
	
	/**
	 * 		查询数组元素的下标
	 * @param array		数组( String[] array )
	 * @param search	要查的数( String search )
	 * @return			要查的数在数组的下标值 targetIndex
	 */
	public static int queryArray(String[] array,String search){
		int targetIndex=-1;
		for(int index=0;index<array.length;index++){
			if(array[index]==null){
				continue;
			}else if(array[index].equals(search)){
				targetIndex = index;
				break;
			}
		}
		return targetIndex;
	}

	/**
	 * 二、		UpdateArray	修改数组中的元素值
	 *
	 * 已知	：	1：数组 		array
	 *	   	 	2：被修改的数   	oldData
	 *  	 	3：修改之后的数 	newData
	 * 求	：	修改之后的数组
	 * 分析	：	如何做到
	
	 */
	
	/**
	 * 
	 * @param array			数组( String[] array )
	 * @param oldData		数组要原来的元素( String )
	 * @param newData		数组元素变更后的数( String )
	 * @return
	 */
	public static String[] updateNum(String[] array,String oldData,String newData){
		int index=queryArray(array,oldData);
		array[index]=newData;
		return array;
	}
	
	/**
	 * 三、		ArrayAdd	数组增加数据（增加一个元素）
	 * 给数组增加数据
	 * 返回数组	这个是新建的数组，数据为从原来的数组中复制+增加的数据
	 * 
	 * 动态的方法可以调用动态的方法。动态的方法可以调用静态的方法。
	 * 静态的方法不可以调用动态的方法。静态的方法只能调用静态的方法。
	 */
	public static String[] addNum(String[] oldArray,String num){
		int len = oldArray.length;
		String[] newArray = new String[len+1];
		for(int index =0 ;index<len;index++){
			newArray[index]= oldArray[index];
		}
		newArray[len]=num;
		return newArray;
	}
	
	/**
	 *  四、		ArrayDelete	数组删除元素
	 * 	已知： 	1、 原来的数组
	 * 			2、 被删除的数
	 * 	求：		删除制定的数据之后的新的数组  //规矩：数组的长度一旦确定，不能修改 
	 *  思路：
	 *  1、创建1个数组  数组长度是原来数组的长度-1
	 * 	2、获取 被删除的数 的下标 index
	 * 	3、以下标为基准 把 原来的数组 分为2部分
	 * 		3.1 如果在index之前   原样复制到  新的数组中
	 * 		3.1 如果在index之后   把index-1 再复制
	 *  4、返回新的数组
	 */
	
	/**
	 * ArrayDelete			数组删除元素
	 * @param oldArray		原数组
	 * @param deleteData	要删除的数（即	元素）
	 * @return
	 */
	public static String[] deleteNum(String[] oldArray,String deleteData){
		
		int length = oldArray.length;
		String[] newArray = new String[length-1];
		int index =queryArray(oldArray,deleteData);
		
		for(int i=0;i<index;i++){
			newArray[i]= oldArray[i];
		}

		for(int i=index+1;i<length;i++){
			newArray[i-1]= oldArray[i];
		}
		return newArray;
	}
	
	


}
